﻿2026-05-14T10:14:09.3568765Z ##[group]Run pnpm --filter @rebno/client test:e2e
2026-05-14T10:14:09.3569681Z [36;1mpnpm --filter @rebno/client test:e2e[0m
2026-05-14T10:14:09.3661143Z shell: /usr/bin/bash -e {0}
2026-05-14T10:14:09.3661578Z env:
2026-05-14T10:14:09.3662015Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-14T10:14:09.3662664Z   STAGING_URL: https://staging.rebno.decidel.com
2026-05-14T10:14:09.3663599Z   STAGING_INVITE_TOKEN: ***
2026-05-14T10:14:09.3664092Z   UAT_ACCOUNT_A: ***
2026-05-14T10:14:09.3664558Z   UAT_PASSWORD_A: ***
2026-05-14T10:14:09.3664962Z   UAT_ACCOUNT_B: ***
2026-05-14T10:14:09.3665408Z   UAT_PASSWORD_B: ***
2026-05-14T10:14:09.3666176Z ##[endgroup]
2026-05-14T10:14:09.6843646Z 
2026-05-14T10:14:09.6844825Z > @rebno/client@0.1.0 test:e2e /home/runner/work/rebno/rebno/apps/client
2026-05-14T10:14:09.6846161Z > playwright test
2026-05-14T10:14:09.6846624Z 
2026-05-14T10:14:11.0517983Z 
2026-05-14T10:14:11.0518954Z Running 28 tests using 1 worker
2026-05-14T10:14:11.0519585Z 
2026-05-14T10:14:22.5394246Z   ✘   1 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (8.0s)
2026-05-14T10:14:31.9503481Z   ✘   2 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (retry #1) (8.3s)
2026-05-14T10:14:40.9810820Z   ✘   3 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (7.6s)
2026-05-14T10:15:00.6040423Z   ✘   4 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (retry #1) (18.6s)
2026-05-14T10:15:07.7096485Z   ✘   5 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (6.0s)
2026-05-14T10:15:15.3082478Z   ✘   6 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (retry #1) (6.5s)
2026-05-14T10:15:38.9321809Z   ✘   7 [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:11:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene (22.4s)
2026-05-14T10:16:03.7818066Z   ✘   8 [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:11:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene (retry #1) (23.5s)
2026-05-14T10:16:13.3982387Z   ✘   9 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block south wall (8.5s)
2026-05-14T10:16:22.1633658Z   ✓  10 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block south wall (retry #1) (8.0s)
2026-05-14T10:16:30.2072673Z   ✓  11 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block north wall (8.0s)
2026-05-14T10:16:48.2742426Z   ✘  12 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block west wall (17.8s)
2026-05-14T10:16:56.3708228Z   ✓  13 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block west wall (retry #1) (7.3s)
2026-05-14T10:17:03.8137641Z   ✓  14 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall (7.4s)
2026-05-14T10:17:12.1376952Z   ✘  15 [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) (7.9s)
2026-05-14T10:17:31.1555059Z   ✘  16 [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) (retry #1) (18.0s)
2026-05-14T10:17:37.3053832Z   ✓  17 [chromium] › test/e2e/cli-08-nameplate-offset.e2e.test.ts:30:1 › nameplate sits above sprite top (D-45) (5.4s)
2026-05-14T10:17:56.1833629Z   ✘  18 [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) (18.3s)
2026-05-14T10:18:14.8462084Z   ✘  19 [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) (retry #1) (17.5s)
2026-05-14T10:18:35.5407725Z   ✘  20 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (19.5s)
2026-05-14T10:18:55.3483851Z   ✘  21 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (retry #1) (18.5s)
2026-05-14T10:19:14.1689210Z   ✘  22 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (17.5s)
2026-05-14T10:19:33.1418172Z   ✘  23 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (retry #1) (17.7s)
2026-05-14T10:19:42.4077917Z   ✘  24 [chromium] › test/e2e/cookie-reload.e2e.test.ts:15:1 › Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (8.2s)
2026-05-14T10:19:51.6386040Z   ✘  25 [chromium] › test/e2e/cookie-reload.e2e.test.ts:15:1 › Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (retry #1) (8.2s)
2026-05-14T10:19:54.2631994Z   ✓  26 [chromium] › test/e2e/login-contrast.e2e.test.ts:64:3 › LoginScene contrast › heading has ≥ 4.5:1 contrast ratio on #0A0E1A background (1.8s)
2026-05-14T10:19:55.9379200Z   ✓  27 [chromium] › test/e2e/login-contrast.e2e.test.ts:72:3 › LoginScene contrast › username label has ≥ 4.5:1 contrast ratio (1.7s)
2026-05-14T10:19:57.6033232Z   ✓  28 [chromium] › test/e2e/login-contrast.e2e.test.ts:78:3 › LoginScene contrast › password label has ≥ 4.5:1 contrast ratio (1.6s)
2026-05-14T10:19:59.2465058Z   ✓  29 [chromium] › test/e2e/login-contrast.e2e.test.ts:84:3 › LoginScene contrast › username input text has ≥ 4.5:1 contrast ratio (1.6s)
2026-05-14T10:20:00.9907462Z   ✓  30 [chromium] › test/e2e/login-contrast.e2e.test.ts:90:3 › LoginScene contrast › password input text has ≥ 4.5:1 contrast ratio (1.7s)
2026-05-14T10:20:02.6595203Z   ✓  31 [chromium] › test/e2e/login-contrast.e2e.test.ts:96:3 › LoginScene contrast › submit CTA button text has ≥ 4.5:1 contrast ratio (1.6s)
2026-05-14T10:20:04.3414258Z   ✓  32 [chromium] › test/e2e/login-contrast.e2e.test.ts:104:3 › LoginScene contrast › focused input border-color is accent #22D3EE (rgb 34,211,238) (1.7s)
2026-05-14T10:21:06.3822436Z   ✘  33 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (1.0m)
2026-05-14T10:21:17.8095325Z   ✘  34 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (retry #1) (10.2s)
2026-05-14T10:21:23.7651031Z   ✓  35 [chromium] › test/e2e/logout.e2e.test.ts:51:3 › Esc menu › canvas click opens menu (D-24 secondary trigger) (5.2s)
2026-05-14T10:21:29.3099863Z   ✓  36 [chromium] › test/e2e/logout.e2e.test.ts:69:3 › Esc menu › Resume closes menu and re-engages movement without navigating (5.5s)
2026-05-14T10:21:36.8846655Z   ✘  37 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (7.2s)
2026-05-14T10:21:55.9254940Z   ✘  38 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (retry #1) (18.0s)
2026-05-14T10:22:00.8580499Z   ✓  39 [chromium] › test/e2e/sprite-state.e2e.test.ts:48:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate DOM mirror is visible for self (count >= 1) (4.1s)
2026-05-14T10:22:05.1456152Z   ✓  40 [chromium] › test/e2e/sprite-state.e2e.test.ts:61:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate text content matches logged-in username (4.3s)
2026-05-14T10:22:13.6517924Z   ✓  41 [chromium] › test/e2e/ws-kill-reconnect.e2e.test.ts:16:1 › WS-kill: login → kill WS → SDK reconnects within grace → canvas still truthy + chat round-trips (8.5s)
2026-05-14T10:22:13.7179759Z 
2026-05-14T10:22:13.7189186Z 
2026-05-14T10:22:13.7209740Z   1) [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-14T10:22:13.7211089Z 
2026-05-14T10:22:13.7211738Z     Error: Camera did not pan: before=(120,160) after=(120,160)
2026-05-14T10:22:13.7212453Z 
2026-05-14T10:22:13.7213477Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-14T10:22:13.7214416Z 
2026-05-14T10:22:13.7214989Z     Expected: >= [32m8[39m
2026-05-14T10:22:13.7215975Z     Received:    [31m0[39m
2026-05-14T10:22:13.7216461Z 
2026-05-14T10:22:13.7216832Z       80 |     cameraDelta,
2026-05-14T10:22:13.7218021Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-14T10:22:13.7219223Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-14T10:22:13.7219897Z          |     ^
2026-05-14T10:22:13.7220429Z       83 |
2026-05-14T10:22:13.7221262Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-14T10:22:13.7222395Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-14T10:22:13.7223674Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-14T10:22:13.7224443Z 
2026-05-14T10:22:13.7225363Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7227146Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/test-failed-1.png
2026-05-14T10:22:13.7228951Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7229723Z 
2026-05-14T10:22:13.7230638Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7232152Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/video.webm
2026-05-14T10:22:13.7233815Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7234652Z 
2026-05-14T10:22:13.7235940Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/error-context.md
2026-05-14T10:22:13.7237068Z 
2026-05-14T10:22:13.7238033Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7239550Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-14T10:22:13.7240799Z     Usage:
2026-05-14T10:22:13.7241614Z 
2026-05-14T10:22:13.7243042Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-14T10:22:13.7244440Z 
2026-05-14T10:22:13.7245336Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7246419Z 
2026-05-14T10:22:13.7247277Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7247967Z 
2026-05-14T10:22:13.7248452Z     Error: Camera did not pan: before=(120,160) after=(120,160)
2026-05-14T10:22:13.7249031Z 
2026-05-14T10:22:13.7249959Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-14T10:22:13.7250823Z 
2026-05-14T10:22:13.7251221Z     Expected: >= [32m8[39m
2026-05-14T10:22:13.7251864Z     Received:    [31m0[39m
2026-05-14T10:22:13.7252316Z 
2026-05-14T10:22:13.7252629Z       80 |     cameraDelta,
2026-05-14T10:22:13.7253908Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-14T10:22:13.7255131Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-14T10:22:13.7256076Z          |     ^
2026-05-14T10:22:13.7256547Z       83 |
2026-05-14T10:22:13.7257333Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-14T10:22:13.7258516Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-14T10:22:13.7259798Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-14T10:22:13.7260660Z 
2026-05-14T10:22:13.7261921Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7263659Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7265746Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7266538Z 
2026-05-14T10:22:13.7267490Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7269110Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/video.webm
2026-05-14T10:22:13.7270885Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7271599Z 
2026-05-14T10:22:13.7272674Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/error-context.md
2026-05-14T10:22:13.7273898Z 
2026-05-14T10:22:13.7274882Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7276712Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-14T10:22:13.7277908Z     Usage:
2026-05-14T10:22:13.7278497Z 
2026-05-14T10:22:13.7279807Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-14T10:22:13.7281080Z 
2026-05-14T10:22:13.7281981Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7282737Z 
2026-05-14T10:22:13.7284103Z   2) [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-14T10:22:13.7285254Z 
2026-05-14T10:22:13.7289465Z     Error: Expected ≥3 distinct frame keys during 1s hold; observed 1 (samples=0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000)
2026-05-14T10:22:13.7292680Z 
2026-05-14T10:22:13.7293776Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-14T10:22:13.7294670Z 
2026-05-14T10:22:13.7295076Z     Expected: >= [32m3[39m
2026-05-14T10:22:13.7296046Z     Received:    [31m1[39m
2026-05-14T10:22:13.7296406Z 
2026-05-14T10:22:13.7296561Z       67 |     unique.size,
2026-05-14T10:22:13.7297715Z       68 |     `Expected ≥3 distinct frame keys during 1s hold; observed ${unique.size} (samples=${samples.join(',')})`,
2026-05-14T10:22:13.7298726Z     > 69 |   ).toBeGreaterThanOrEqual(3);
2026-05-14T10:22:13.7299213Z          |     ^
2026-05-14T10:22:13.7299553Z       70 |
2026-05-14T10:22:13.7300152Z       71 |   // 4. Each observed frame must match a NaviRun* pattern (sanity).
2026-05-14T10:22:13.7300859Z       72 |   for (const f of unique) {
2026-05-14T10:22:13.7301703Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:69:5
2026-05-14T10:22:13.7302338Z 
2026-05-14T10:22:13.7303128Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7304481Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-14T10:22:13.7306227Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7306761Z 
2026-05-14T10:22:13.7307507Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7308776Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/video.webm
2026-05-14T10:22:13.7310089Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7310535Z 
2026-05-14T10:22:13.7311258Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-14T10:22:13.7312402Z 
2026-05-14T10:22:13.7313172Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7314520Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-14T10:22:13.7319667Z     Usage:
2026-05-14T10:22:13.7319909Z 
2026-05-14T10:22:13.7320857Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-14T10:22:13.7321815Z 
2026-05-14T10:22:13.7322543Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7323055Z 
2026-05-14T10:22:13.7323790Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7324335Z 
2026-05-14T10:22:13.7325061Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-14T10:22:13.7326399Z 
2026-05-14T10:22:13.7326740Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-14T10:22:13.7327313Z     Expected: visible
2026-05-14T10:22:13.7327708Z     Timeout: 15000ms
2026-05-14T10:22:13.7328146Z     Error: element(s) not found
2026-05-14T10:22:13.7328446Z 
2026-05-14T10:22:13.7328589Z     Call log:
2026-05-14T10:22:13.7329251Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-14T10:22:13.7330171Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-14T10:22:13.7330627Z 
2026-05-14T10:22:13.7330638Z 
2026-05-14T10:22:13.7330795Z        at fixtures.ts:172
2026-05-14T10:22:13.7331050Z 
2026-05-14T10:22:13.7331205Z       170 |  */
2026-05-14T10:22:13.7331902Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-14T10:22:13.7332971Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-14T10:22:13.7333854Z           |                                                                ^
2026-05-14T10:22:13.7334457Z       173 |     timeout: 15_000,
2026-05-14T10:22:13.7334895Z       174 |   });
2026-05-14T10:22:13.7335260Z       175 | }
2026-05-14T10:22:13.7336795Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-14T10:22:13.7337999Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:38:9
2026-05-14T10:22:13.7338621Z 
2026-05-14T10:22:13.7339443Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7340986Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7342576Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7343120Z 
2026-05-14T10:22:13.7343863Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7345757Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-14T10:22:13.7347318Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7347872Z 
2026-05-14T10:22:13.7348810Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-14T10:22:13.7349772Z 
2026-05-14T10:22:13.7350581Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7351920Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7352904Z     Usage:
2026-05-14T10:22:13.7353094Z 
2026-05-14T10:22:13.7354091Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7355407Z 
2026-05-14T10:22:13.7357391Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7357976Z 
2026-05-14T10:22:13.7359177Z   3) [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-14T10:22:13.7360157Z 
2026-05-14T10:22:13.7360542Z     Error: Camera scrollX did not advance: before=120 after=120
2026-05-14T10:22:13.7361023Z 
2026-05-14T10:22:13.7361802Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-14T10:22:13.7362485Z 
2026-05-14T10:22:13.7362777Z     Expected: > [32m15[39m
2026-05-14T10:22:13.7363334Z     Received:   [31m0[39m
2026-05-14T10:22:13.7363622Z 
2026-05-14T10:22:13.7363917Z       83 |     (after as number) - (before as number),
2026-05-14T10:22:13.7364743Z       84 |     `Camera scrollX did not advance: before=${before} after=${after}`,
2026-05-14T10:22:13.7365784Z     > 85 |   ).toBeGreaterThan(15);
2026-05-14T10:22:13.7366294Z          |     ^
2026-05-14T10:22:13.7366678Z       86 | });
2026-05-14T10:22:13.7367047Z       87 |
2026-05-14T10:22:13.7367812Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:85:5
2026-05-14T10:22:13.7368456Z 
2026-05-14T10:22:13.7369268Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7370701Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-14T10:22:13.7372189Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7372723Z 
2026-05-14T10:22:13.7373471Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7374756Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/video.webm
2026-05-14T10:22:13.7376774Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7377643Z 
2026-05-14T10:22:13.7378507Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-14T10:22:13.7379380Z 
2026-05-14T10:22:13.7380100Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7381342Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-14T10:22:13.7382249Z     Usage:
2026-05-14T10:22:13.7382467Z 
2026-05-14T10:22:13.7383396Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-14T10:22:13.7384384Z 
2026-05-14T10:22:13.7385117Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7385907Z 
2026-05-14T10:22:13.7386647Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7387473Z 
2026-05-14T10:22:13.7387855Z     Error: Camera scrollX did not advance: before=120 after=120
2026-05-14T10:22:13.7388300Z 
2026-05-14T10:22:13.7389048Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-14T10:22:13.7389712Z 
2026-05-14T10:22:13.7390005Z     Expected: > [32m15[39m
2026-05-14T10:22:13.7390554Z     Received:   [31m0[39m
2026-05-14T10:22:13.7390833Z 
2026-05-14T10:22:13.7391133Z       83 |     (after as number) - (before as number),
2026-05-14T10:22:13.7391942Z       84 |     `Camera scrollX did not advance: before=${before} after=${after}`,
2026-05-14T10:22:13.7392652Z     > 85 |   ).toBeGreaterThan(15);
2026-05-14T10:22:13.7393118Z          |     ^
2026-05-14T10:22:13.7393491Z       86 | });
2026-05-14T10:22:13.7393830Z       87 |
2026-05-14T10:22:13.7394563Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:85:5
2026-05-14T10:22:13.7395326Z 
2026-05-14T10:22:13.7396659Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7398121Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7399691Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7400220Z 
2026-05-14T10:22:13.7401015Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7402308Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-14T10:22:13.7403545Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7403973Z 
2026-05-14T10:22:13.7404709Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-14T10:22:13.7406297Z 
2026-05-14T10:22:13.7407143Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7408458Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7409437Z     Usage:
2026-05-14T10:22:13.7409664Z 
2026-05-14T10:22:13.7410626Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7411619Z 
2026-05-14T10:22:13.7412296Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7412813Z 
2026-05-14T10:22:13.7414132Z   4) [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:11:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene 
2026-05-14T10:22:13.7415222Z 
2026-05-14T10:22:13.7416318Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-14T10:22:13.7416909Z 
2026-05-14T10:22:13.7417206Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-14T10:22:13.7417738Z     Expected: visible
2026-05-14T10:22:13.7418098Z     Timeout: 15000ms
2026-05-14T10:22:13.7418497Z     Error: element(s) not found
2026-05-14T10:22:13.7418764Z 
2026-05-14T10:22:13.7418904Z     Call log:
2026-05-14T10:22:13.7419558Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-14T10:22:13.7420388Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-14T10:22:13.7420975Z 
2026-05-14T10:22:13.7420986Z 
2026-05-14T10:22:13.7421140Z        at fixtures.ts:172
2026-05-14T10:22:13.7421386Z 
2026-05-14T10:22:13.7421513Z       170 |  */
2026-05-14T10:22:13.7422127Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-14T10:22:13.7423097Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-14T10:22:13.7423936Z           |                                                                ^
2026-05-14T10:22:13.7424477Z       173 |     timeout: 15_000,
2026-05-14T10:22:13.7424870Z       174 |   });
2026-05-14T10:22:13.7425187Z       175 | }
2026-05-14T10:22:13.7426204Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-14T10:22:13.7427415Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-dup-login.e2e.test.ts:32:13
2026-05-14T10:22:13.7428040Z 
2026-05-14T10:22:13.7428759Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7430024Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/test-failed-1.png
2026-05-14T10:22:13.7431432Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7431914Z 
2026-05-14T10:22:13.7432619Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7434109Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/test-failed-2.png
2026-05-14T10:22:13.7435877Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7436387Z 
2026-05-14T10:22:13.7437182Z     Error Context: test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/error-context.md
2026-05-14T10:22:13.7438028Z 
2026-05-14T10:22:13.7438732Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7439938Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/trace.zip
2026-05-14T10:22:13.7440815Z     Usage:
2026-05-14T10:22:13.7441003Z 
2026-05-14T10:22:13.7441860Z         pnpm exec playwright show-trace test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/trace.zip
2026-05-14T10:22:13.7442981Z 
2026-05-14T10:22:13.7443613Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7444099Z 
2026-05-14T10:22:13.7444734Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7445225Z 
2026-05-14T10:22:13.7446100Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-14T10:22:13.7446679Z 
2026-05-14T10:22:13.7446888Z     Locator: locator('#username')
2026-05-14T10:22:13.7447327Z     Expected: visible
2026-05-14T10:22:13.7447691Z     Timeout: 15000ms
2026-05-14T10:22:13.7448097Z     Error: element(s) not found
2026-05-14T10:22:13.7448370Z 
2026-05-14T10:22:13.7448504Z     Call log:
2026-05-14T10:22:13.7449076Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-14T10:22:13.7449788Z     [2m  - waiting for locator('#username')[22m
2026-05-14T10:22:13.7450162Z 
2026-05-14T10:22:13.7450188Z 
2026-05-14T10:22:13.7450749Z       37 |       // SOURCE: GameScene.ts onForceReset transitions to LoginScene with an eviction banner.
2026-05-14T10:22:13.7451855Z       38 |       // The force_reset s2c event causes A1 to leave the room and start LoginScene.
2026-05-14T10:22:13.7452890Z     > 39 |       await expect(pageA1.locator('#username')).toBeVisible({ timeout: 15_000 });
2026-05-14T10:22:13.7453652Z          |                                                 ^
2026-05-14T10:22:13.7454070Z       40 |     } finally {
2026-05-14T10:22:13.7454445Z       41 |       await ctxA1.close();
2026-05-14T10:22:13.7454858Z       42 |       await ctxA2.close();
2026-05-14T10:22:13.7455970Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-dup-login.e2e.test.ts:39:49
2026-05-14T10:22:13.7456515Z 
2026-05-14T10:22:13.7457144Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7458322Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7459759Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7460184Z 
2026-05-14T10:22:13.7460762Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7461907Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/test-failed-2.png
2026-05-14T10:22:13.7463135Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7463554Z 
2026-05-14T10:22:13.7464281Z     Error Context: test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/error-context.md
2026-05-14T10:22:13.7465065Z 
2026-05-14T10:22:13.7465844Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7467134Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/trace.zip
2026-05-14T10:22:13.7467937Z     Usage:
2026-05-14T10:22:13.7468092Z 
2026-05-14T10:22:13.7468902Z         pnpm exec playwright show-trace test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/trace.zip
2026-05-14T10:22:13.7469748Z 
2026-05-14T10:22:13.7470292Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7470718Z 
2026-05-14T10:22:13.7471591Z   5) [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) 
2026-05-14T10:22:13.7472351Z 
2026-05-14T10:22:13.7476708Z     Error: D-41 regression: expected ≥3 distinct localFrame keys during 1s KeyD hold; observed 1 (samples=[0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000]). Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.
2026-05-14T10:22:13.7479788Z 
2026-05-14T10:22:13.7480618Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-14T10:22:13.7481304Z 
2026-05-14T10:22:13.7481528Z     Expected: >= [32m3[39m
2026-05-14T10:22:13.7481977Z     Received:    [31m1[39m
2026-05-14T10:22:13.7482233Z 
2026-05-14T10:22:13.7482616Z       83 |       `observed ${unique.size} (samples=[${samples.join(',')}]). ` +
2026-05-14T10:22:13.7483857Z       84 |       `Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.`,
2026-05-14T10:22:13.7484753Z     > 85 |   ).toBeGreaterThanOrEqual(3);
2026-05-14T10:22:13.7486126Z          |     ^
2026-05-14T10:22:13.7486529Z       86 |
2026-05-14T10:22:13.7487434Z       87 |   // 5. At least one observed frame key must contain 'Run' — confirms we left Stand state.
2026-05-14T10:22:13.7488394Z       88 |   const hasRunFrame = [...unique].some((f) => f.includes('Run'));
2026-05-14T10:22:13.7489423Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-local-anim.e2e.test.ts:85:5
2026-05-14T10:22:13.7490040Z 
2026-05-14T10:22:13.7490747Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7492265Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/test-failed-1.png
2026-05-14T10:22:13.7493719Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7494227Z 
2026-05-14T10:22:13.7494921Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7496855Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/video.webm
2026-05-14T10:22:13.7498302Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7498832Z 
2026-05-14T10:22:13.7499639Z     Error Context: test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/error-context.md
2026-05-14T10:22:13.7500513Z 
2026-05-14T10:22:13.7501310Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7502839Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/trace.zip
2026-05-14T10:22:13.7503680Z     Usage:
2026-05-14T10:22:13.7503845Z 
2026-05-14T10:22:13.7504609Z         pnpm exec playwright show-trace test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/trace.zip
2026-05-14T10:22:13.7505405Z 
2026-05-14T10:22:13.7506264Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7506766Z 
2026-05-14T10:22:13.7507460Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7508005Z 
2026-05-14T10:22:13.7508652Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-14T10:22:13.7509262Z 
2026-05-14T10:22:13.7509600Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-14T10:22:13.7510188Z     Expected: visible
2026-05-14T10:22:13.7510601Z     Timeout: 15000ms
2026-05-14T10:22:13.7511045Z     Error: element(s) not found
2026-05-14T10:22:13.7511323Z 
2026-05-14T10:22:13.7511685Z     Call log:
2026-05-14T10:22:13.7512336Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-14T10:22:13.7513192Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-14T10:22:13.7513648Z 
2026-05-14T10:22:13.7513681Z 
2026-05-14T10:22:13.7513849Z        at fixtures.ts:172
2026-05-14T10:22:13.7514310Z 
2026-05-14T10:22:13.7514453Z       170 |  */
2026-05-14T10:22:13.7515079Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-14T10:22:13.7516516Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-14T10:22:13.7517351Z           |                                                                ^
2026-05-14T10:22:13.7517904Z       173 |     timeout: 15_000,
2026-05-14T10:22:13.7518313Z       174 |   });
2026-05-14T10:22:13.7518636Z       175 | }
2026-05-14T10:22:13.7519416Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-14T10:22:13.7520620Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-local-anim.e2e.test.ts:31:9
2026-05-14T10:22:13.7521242Z 
2026-05-14T10:22:13.7521970Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7523522Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7524959Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7525696Z 
2026-05-14T10:22:13.7526423Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7527697Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/video.webm
2026-05-14T10:22:13.7529084Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7529581Z 
2026-05-14T10:22:13.7530424Z     Error Context: test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/error-context.md
2026-05-14T10:22:13.7531313Z 
2026-05-14T10:22:13.7532047Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7533362Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7534250Z     Usage:
2026-05-14T10:22:13.7534439Z 
2026-05-14T10:22:13.7535369Z         pnpm exec playwright show-trace test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7536738Z 
2026-05-14T10:22:13.7537405Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7537903Z 
2026-05-14T10:22:13.7539016Z   6) [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) 
2026-05-14T10:22:13.7539970Z 
2026-05-14T10:22:13.7540651Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeAttached[2m([22m[2m)[22m failed
2026-05-14T10:22:13.7541215Z 
2026-05-14T10:22:13.7541662Z     Locator: locator('[data-nameplate="***"]')
2026-05-14T10:22:13.7542192Z     Expected: attached
2026-05-14T10:22:13.7542779Z     Timeout: 10000ms
2026-05-14T10:22:13.7543194Z     Error: element(s) not found
2026-05-14T10:22:13.7543472Z 
2026-05-14T10:22:13.7543610Z     Call log:
2026-05-14T10:22:13.7544191Z     [2m  - Expect "toBeAttached" with timeout 10000ms[22m
2026-05-14T10:22:13.7545028Z     [2m  - waiting for locator('[data-nameplate="***"]')[22m
2026-05-14T10:22:13.7545674Z 
2026-05-14T10:22:13.7545687Z 
2026-05-14T10:22:13.7545863Z       46 |     await expect(
2026-05-14T10:22:13.7546479Z       47 |       a.locator(`[data-nameplate="${accountA.username}"]`),
2026-05-14T10:22:13.7547153Z     > 48 |     ).toBeAttached({ timeout: 10_000 });
2026-05-14T10:22:13.7547636Z          |       ^
2026-05-14T10:22:13.7547967Z       49 |
2026-05-14T10:22:13.7548357Z       50 |     const localColor = await a
2026-05-14T10:22:13.7548996Z       51 |       .locator(`[data-nameplate="${accountA.username}"]`)
2026-05-14T10:22:13.7549832Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-nameplate.e2e.test.ts:48:7
2026-05-14T10:22:13.7550570Z 
2026-05-14T10:22:13.7551203Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7552332Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-14T10:22:13.7553520Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7553950Z 
2026-05-14T10:22:13.7554528Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7556010Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/test-failed-2.png
2026-05-14T10:22:13.7557218Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7557647Z 
2026-05-14T10:22:13.7558330Z     Error Context: test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-14T10:22:13.7559117Z 
2026-05-14T10:22:13.7559709Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7560753Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-14T10:22:13.7561477Z     Usage:
2026-05-14T10:22:13.7561631Z 
2026-05-14T10:22:13.7562385Z         pnpm exec playwright show-trace test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-14T10:22:13.7563185Z 
2026-05-14T10:22:13.7563717Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7564139Z 
2026-05-14T10:22:13.7564663Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7565095Z 
2026-05-14T10:22:13.7565795Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeAttached[2m([22m[2m)[22m failed
2026-05-14T10:22:13.7566503Z 
2026-05-14T10:22:13.7566794Z     Locator: locator('[data-nameplate="***"]')
2026-05-14T10:22:13.7567281Z     Expected: attached
2026-05-14T10:22:13.7567689Z     Timeout: 10000ms
2026-05-14T10:22:13.7568129Z     Error: element(s) not found
2026-05-14T10:22:13.7568425Z 
2026-05-14T10:22:13.7568590Z     Call log:
2026-05-14T10:22:13.7569263Z     [2m  - Expect "toBeAttached" with timeout 10000ms[22m
2026-05-14T10:22:13.7570137Z     [2m  - waiting for locator('[data-nameplate="***"]')[22m
2026-05-14T10:22:13.7570530Z 
2026-05-14T10:22:13.7570539Z 
2026-05-14T10:22:13.7570688Z       46 |     await expect(
2026-05-14T10:22:13.7571276Z       47 |       a.locator(`[data-nameplate="${accountA.username}"]`),
2026-05-14T10:22:13.7571954Z     > 48 |     ).toBeAttached({ timeout: 10_000 });
2026-05-14T10:22:13.7572432Z          |       ^
2026-05-14T10:22:13.7572761Z       49 |
2026-05-14T10:22:13.7573150Z       50 |     const localColor = await a
2026-05-14T10:22:13.7574263Z       51 |       .locator(`[data-nameplate="${accountA.username}"]`)
2026-05-14T10:22:13.7575242Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-nameplate.e2e.test.ts:48:7
2026-05-14T10:22:13.7576365Z 
2026-05-14T10:22:13.7577130Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7578533Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7580112Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7580631Z 
2026-05-14T10:22:13.7581345Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7582654Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/test-failed-2.png
2026-05-14T10:22:13.7584098Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7584626Z 
2026-05-14T10:22:13.7585706Z     Error Context: test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-14T10:22:13.7586614Z 
2026-05-14T10:22:13.7587358Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7588694Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7589591Z     Usage:
2026-05-14T10:22:13.7589780Z 
2026-05-14T10:22:13.7590760Z         pnpm exec playwright show-trace test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7591687Z 
2026-05-14T10:22:13.7592315Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7592742Z 
2026-05-14T10:22:13.7593653Z   7) [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-14T10:22:13.7594770Z 
2026-05-14T10:22:13.7595955Z     Error: RoomRenderer.renderNew must emit floor tile sprites for mvp-room (D-40 verify-bail flip / Plan 06.1-05)
2026-05-14T10:22:13.7596715Z 
2026-05-14T10:22:13.7597442Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-14T10:22:13.7598055Z 
2026-05-14T10:22:13.7598281Z     Expected: > [32m0[39m
2026-05-14T10:22:13.7598740Z     Received:   [31m0[39m
2026-05-14T10:22:13.7598991Z 
2026-05-14T10:22:13.7599127Z     Call Log:
2026-05-14T10:22:13.7599645Z     - Timeout 15000ms exceeded while waiting on the predicate
2026-05-14T10:22:13.7600070Z 
2026-05-14T10:22:13.7600544Z       55 |   //    once RoomRenderer.renderNew (Plan 06.1-05) has placed at least one tile
2026-05-14T10:22:13.7601527Z       56 |   //    via group.add(). mvp-room ships 324 tiles, so any positive count clears.
2026-05-14T10:22:13.7602426Z     > 57 |   await expect
2026-05-14T10:22:13.7602771Z          |   ^
2026-05-14T10:22:13.7603080Z       58 |     .poll(
2026-05-14T10:22:13.7603416Z       59 |       async () =>
2026-05-14T10:22:13.7603815Z       60 |         page.evaluate(
2026-05-14T10:22:13.7604518Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:57:3
2026-05-14T10:22:13.7605059Z 
2026-05-14T10:22:13.7605930Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7607124Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-14T10:22:13.7608410Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7608855Z 
2026-05-14T10:22:13.7609484Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7610565Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/video.webm
2026-05-14T10:22:13.7611819Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7612252Z 
2026-05-14T10:22:13.7612969Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-14T10:22:13.7613743Z 
2026-05-14T10:22:13.7614390Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7615985Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-14T10:22:13.7616787Z     Usage:
2026-05-14T10:22:13.7616965Z 
2026-05-14T10:22:13.7617795Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-14T10:22:13.7618650Z 
2026-05-14T10:22:13.7619265Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7619925Z 
2026-05-14T10:22:13.7620528Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7620988Z 
2026-05-14T10:22:13.7621616Z     Error: RoomRenderer.renderNew must emit floor tile sprites for mvp-room (D-40 verify-bail flip / Plan 06.1-05)
2026-05-14T10:22:13.7622286Z 
2026-05-14T10:22:13.7622926Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-14T10:22:13.7623500Z 
2026-05-14T10:22:13.7623705Z     Expected: > [32m0[39m
2026-05-14T10:22:13.7624139Z     Received:   [31m0[39m
2026-05-14T10:22:13.7624367Z 
2026-05-14T10:22:13.7624490Z     Call Log:
2026-05-14T10:22:13.7624965Z     - Timeout 15000ms exceeded while waiting on the predicate
2026-05-14T10:22:13.7625365Z 
2026-05-14T10:22:13.7625991Z       55 |   //    once RoomRenderer.renderNew (Plan 06.1-05) has placed at least one tile
2026-05-14T10:22:13.7627675Z       56 |   //    via group.add(). mvp-room ships 324 tiles, so any positive count clears.
2026-05-14T10:22:13.7628332Z     > 57 |   await expect
2026-05-14T10:22:13.7628691Z          |   ^
2026-05-14T10:22:13.7628996Z       58 |     .poll(
2026-05-14T10:22:13.7629338Z       59 |       async () =>
2026-05-14T10:22:13.7629765Z       60 |         page.evaluate(
2026-05-14T10:22:13.7630479Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:57:3
2026-05-14T10:22:13.7630996Z 
2026-05-14T10:22:13.7631686Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7632910Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7634283Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7634727Z 
2026-05-14T10:22:13.7635370Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7657021Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-14T10:22:13.7658433Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7658904Z 
2026-05-14T10:22:13.7659704Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-14T10:22:13.7660537Z 
2026-05-14T10:22:13.7661231Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7662466Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7663313Z     Usage:
2026-05-14T10:22:13.7663497Z 
2026-05-14T10:22:13.7664400Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-14T10:22:13.7665773Z 
2026-05-14T10:22:13.7666420Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7666882Z 
2026-05-14T10:22:13.7667886Z   8) [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-14T10:22:13.7668696Z 
2026-05-14T10:22:13.7669295Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeAttached[2m([22m[2m)[22m failed
2026-05-14T10:22:13.7669831Z 
2026-05-14T10:22:13.7670132Z     Locator: locator('[data-nameplate="***"]')
2026-05-14T10:22:13.7670623Z     Expected: attached
2026-05-14T10:22:13.7670984Z     Timeout: 10000ms
2026-05-14T10:22:13.7671389Z     Error: element(s) not found
2026-05-14T10:22:13.7671630Z 
2026-05-14T10:22:13.7671753Z     Call log:
2026-05-14T10:22:13.7672271Z     [2m  - Expect "toBeAttached" with timeout 10000ms[22m
2026-05-14T10:22:13.7673004Z     [2m  - waiting for locator('[data-nameplate="***"]')[22m
2026-05-14T10:22:13.7673594Z 
2026-05-14T10:22:13.7673604Z 
2026-05-14T10:22:13.7673755Z       53 |     await expect(
2026-05-14T10:22:13.7674312Z       54 |       a.locator(`[data-nameplate="${accountB.username}"]`),
2026-05-14T10:22:13.7674915Z     > 55 |     ).toBeAttached({ timeout: 10_000 });
2026-05-14T10:22:13.7675362Z          |       ^
2026-05-14T10:22:13.7695947Z       56 |     await expect(
2026-05-14T10:22:13.7696526Z       57 |       b.locator(`[data-nameplate="${accountA.username}"]`),
2026-05-14T10:22:13.7697155Z       58 |     ).toBeAttached({ timeout: 10_000 });
2026-05-14T10:22:13.7697908Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:55:7
2026-05-14T10:22:13.7698415Z 
2026-05-14T10:22:13.7699127Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7700337Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-1.png
2026-05-14T10:22:13.7701689Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7702166Z 
2026-05-14T10:22:13.7702835Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7704039Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-2.png
2026-05-14T10:22:13.7705379Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7706021Z 
2026-05-14T10:22:13.7706776Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/error-context.md
2026-05-14T10:22:13.7707570Z 
2026-05-14T10:22:13.7708268Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7709411Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-14T10:22:13.7710209Z     Usage:
2026-05-14T10:22:13.7710588Z 
2026-05-14T10:22:13.7711394Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-14T10:22:13.7712243Z 
2026-05-14T10:22:13.7712854Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7713309Z 
2026-05-14T10:22:13.7713909Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7714371Z 
2026-05-14T10:22:13.7714950Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeAttached[2m([22m[2m)[22m failed
2026-05-14T10:22:13.7735692Z 
2026-05-14T10:22:13.7736024Z     Locator: locator('[data-nameplate="***"]')
2026-05-14T10:22:13.7736497Z     Expected: attached
2026-05-14T10:22:13.7736848Z     Timeout: 10000ms
2026-05-14T10:22:13.7737228Z     Error: element(s) not found
2026-05-14T10:22:13.7737475Z 
2026-05-14T10:22:13.7737826Z     Call log:
2026-05-14T10:22:13.7738428Z     [2m  - Expect "toBeAttached" with timeout 10000ms[22m
2026-05-14T10:22:13.7739236Z     [2m  - waiting for locator('[data-nameplate="***"]')[22m
2026-05-14T10:22:13.7739614Z 
2026-05-14T10:22:13.7739631Z 
2026-05-14T10:22:13.7739777Z       53 |     await expect(
2026-05-14T10:22:13.7740327Z       54 |       a.locator(`[data-nameplate="${accountB.username}"]`),
2026-05-14T10:22:13.7741050Z     > 55 |     ).toBeAttached({ timeout: 10_000 });
2026-05-14T10:22:13.7741495Z          |       ^
2026-05-14T10:22:13.7741826Z       56 |     await expect(
2026-05-14T10:22:13.7742373Z       57 |       b.locator(`[data-nameplate="${accountA.username}"]`),
2026-05-14T10:22:13.7742983Z       58 |     ).toBeAttached({ timeout: 10_000 });
2026-05-14T10:22:13.7743718Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:55:7
2026-05-14T10:22:13.7744231Z 
2026-05-14T10:22:13.7744905Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7746391Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7747773Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7748232Z 
2026-05-14T10:22:13.7748898Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7750128Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-2.png
2026-05-14T10:22:13.7751471Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7751917Z 
2026-05-14T10:22:13.7752727Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/error-context.md
2026-05-14T10:22:13.7753556Z 
2026-05-14T10:22:13.7754222Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7775855Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-14T10:22:13.7776718Z     Usage:
2026-05-14T10:22:13.7776898Z 
2026-05-14T10:22:13.7777770Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-14T10:22:13.7778660Z 
2026-05-14T10:22:13.7779276Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7779721Z 
2026-05-14T10:22:13.7780693Z   9) [chromium] › test/e2e/cookie-reload.e2e.test.ts:15:1 › Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-14T10:22:13.7781477Z 
2026-05-14T10:22:13.7782232Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-14T10:22:13.7782875Z 
2026-05-14T10:22:13.7783357Z     Expected: [32m"mvp-room"[39m
2026-05-14T10:22:13.7783858Z     Received: [31m""[39m
2026-05-14T10:22:13.7784103Z 
2026-05-14T10:22:13.7784521Z       42 |     () => (window as unknown as { __rebno?: { roomId?: string } }).__rebno?.roomId,
2026-05-14T10:22:13.7785138Z       43 |   );
2026-05-14T10:22:13.7785767Z     > 44 |   expect(postReloadRoomId).toBe('mvp-room');
2026-05-14T10:22:13.7786285Z          |                            ^
2026-05-14T10:22:13.7786679Z       45 |
2026-05-14T10:22:13.7787107Z       46 |   const loadedTextures = await page.evaluate(
2026-05-14T10:22:13.7787586Z       47 |     () =>
2026-05-14T10:22:13.7788281Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cookie-reload.e2e.test.ts:44:28
2026-05-14T10:22:13.7788853Z 
2026-05-14T10:22:13.7789534Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7790772Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/test-failed-1.png
2026-05-14T10:22:13.7792127Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7792595Z 
2026-05-14T10:22:13.7793266Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7794419Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/video.webm
2026-05-14T10:22:13.7815913Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7816392Z 
2026-05-14T10:22:13.7817184Z     Error Context: test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/error-context.md
2026-05-14T10:22:13.7818013Z 
2026-05-14T10:22:13.7818719Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7819876Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/trace.zip
2026-05-14T10:22:13.7820926Z     Usage:
2026-05-14T10:22:13.7821106Z 
2026-05-14T10:22:13.7821944Z         pnpm exec playwright show-trace test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/trace.zip
2026-05-14T10:22:13.7822818Z 
2026-05-14T10:22:13.7823424Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7823863Z 
2026-05-14T10:22:13.7824417Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7824838Z 
2026-05-14T10:22:13.7825743Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-14T10:22:13.7826355Z 
2026-05-14T10:22:13.7826614Z     Expected: [32m"mvp-room"[39m
2026-05-14T10:22:13.7827064Z     Received: [31m""[39m
2026-05-14T10:22:13.7827288Z 
2026-05-14T10:22:13.7827700Z       42 |     () => (window as unknown as { __rebno?: { roomId?: string } }).__rebno?.roomId,
2026-05-14T10:22:13.7828502Z       43 |   );
2026-05-14T10:22:13.7828946Z     > 44 |   expect(postReloadRoomId).toBe('mvp-room');
2026-05-14T10:22:13.7829461Z          |                            ^
2026-05-14T10:22:13.7829835Z       45 |
2026-05-14T10:22:13.7830268Z       46 |   const loadedTextures = await page.evaluate(
2026-05-14T10:22:13.7830734Z       47 |     () =>
2026-05-14T10:22:13.7831423Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cookie-reload.e2e.test.ts:44:28
2026-05-14T10:22:13.7831989Z 
2026-05-14T10:22:13.7832655Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7833954Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7853340Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7853873Z 
2026-05-14T10:22:13.7854560Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7856011Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/video.webm
2026-05-14T10:22:13.7857401Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7857856Z 
2026-05-14T10:22:13.7858700Z     Error Context: test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/error-context.md
2026-05-14T10:22:13.7859579Z 
2026-05-14T10:22:13.7860246Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7861472Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-14T10:22:13.7862355Z     Usage:
2026-05-14T10:22:13.7862536Z 
2026-05-14T10:22:13.7863493Z         pnpm exec playwright show-trace test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-14T10:22:13.7864677Z 
2026-05-14T10:22:13.7865286Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7865940Z 
2026-05-14T10:22:13.7866921Z   10) [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-14T10:22:13.7867736Z 
2026-05-14T10:22:13.7868058Z     [31mTest timeout of 60000ms exceeded.[39m
2026-05-14T10:22:13.7868375Z 
2026-05-14T10:22:13.7868673Z     Error: locator.click: Test timeout of 60000ms exceeded.
2026-05-14T10:22:13.7869177Z     Call log:
2026-05-14T10:22:13.7869817Z     [2m  - waiting for locator('[data-testid="esc-menu-logout"]')[22m
2026-05-14T10:22:13.7870934Z     [2m    - locator resolved to <button type="button" data-testid="esc-menu-logout">Logout</button>[22m
2026-05-14T10:22:13.7871843Z     [2m  - attempting click action[22m
2026-05-14T10:22:13.7872568Z     [2m    - waiting for element to be visible, enabled and stable[22m
2026-05-14T10:22:13.7873679Z     [2m    - element is visible, enabled and stable[22m
2026-05-14T10:22:13.7874305Z     [2m    - scrolling into view if needed[22m
2026-05-14T10:22:13.7874865Z     [2m    - done scrolling[22m
2026-05-14T10:22:13.7875397Z     [2m    - performing click action[22m
2026-05-14T10:22:13.7896445Z     [2m    - <html lang="en">…</html> intercepts pointer events[22m
2026-05-14T10:22:13.7897122Z     [2m  - retrying click action[22m
2026-05-14T10:22:13.7897849Z     [2m    - waiting for element to be visible, enabled and stable[22m
2026-05-14T10:22:13.7898644Z     [2m  - element was detached from the DOM, retrying[22m
2026-05-14T10:22:13.7899017Z 
2026-05-14T10:22:13.7899027Z 
2026-05-14T10:22:13.7899147Z       33 |
2026-05-14T10:22:13.7899490Z       34 |     // Click Logout
2026-05-14T10:22:13.7900100Z     > 35 |     await page.locator('[data-testid="esc-menu-logout"]').click();
2026-05-14T10:22:13.7900807Z          |                                                           ^
2026-05-14T10:22:13.7901275Z       36 |
2026-05-14T10:22:13.7901818Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-14T10:22:13.7902804Z       38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-14T10:22:13.7903802Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:35:59
2026-05-14T10:22:13.7904338Z 
2026-05-14T10:22:13.7905040Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7936307Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/test-failed-1.png
2026-05-14T10:22:13.7937831Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7938339Z 
2026-05-14T10:22:13.7939046Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7941235Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/video.webm
2026-05-14T10:22:13.7942667Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7943280Z 
2026-05-14T10:22:13.7944166Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/error-context.md
2026-05-14T10:22:13.7945081Z 
2026-05-14T10:22:13.7945987Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7947152Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-14T10:22:13.7948047Z     Usage:
2026-05-14T10:22:13.7948280Z 
2026-05-14T10:22:13.7949219Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-14T10:22:13.7950213Z 
2026-05-14T10:22:13.7950912Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7951615Z 
2026-05-14T10:22:13.7952245Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7952731Z 
2026-05-14T10:22:13.7953344Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-14T10:22:13.7953895Z 
2026-05-14T10:22:13.7954224Z     Locator: locator('form#login-form, #login-form, #username')
2026-05-14T10:22:13.7954791Z     Expected: visible
2026-05-14T10:22:13.7955147Z     Timeout: 5000ms
2026-05-14T10:22:13.7956123Z     Error: element(s) not found
2026-05-14T10:22:13.7956416Z 
2026-05-14T10:22:13.7956561Z     Call log:
2026-05-14T10:22:13.7957143Z     [2m  - Expect "toBeVisible" with timeout 5000ms[22m
2026-05-14T10:22:13.7958057Z     [2m  - waiting for locator('form#login-form, #login-form, #username')[22m
2026-05-14T10:22:13.7958509Z 
2026-05-14T10:22:13.7958766Z 
2026-05-14T10:22:13.7958918Z       36 |
2026-05-14T10:22:13.7959419Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-14T10:22:13.7960284Z     > 38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-14T10:22:13.7961055Z          |                                                                           ^
2026-05-14T10:22:13.7961551Z       39 |       timeout: 5_000,
2026-05-14T10:22:13.7961892Z       40 |     });
2026-05-14T10:22:13.7962170Z       41 |
2026-05-14T10:22:13.7962717Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:38:75
2026-05-14T10:22:13.7963187Z 
2026-05-14T10:22:13.7963802Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:13.7965772Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/test-failed-1.png
2026-05-14T10:22:13.7967091Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7967552Z 
2026-05-14T10:22:13.7968124Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7969227Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/video.webm
2026-05-14T10:22:13.7970457Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7970973Z 
2026-05-14T10:22:13.7971845Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/error-context.md
2026-05-14T10:22:13.7972770Z 
2026-05-14T10:22:13.7973513Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:13.7974896Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-14T10:22:13.7976064Z     Usage:
2026-05-14T10:22:13.7976535Z 
2026-05-14T10:22:13.7977697Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-14T10:22:13.7978739Z 
2026-05-14T10:22:13.7979449Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:13.7980679Z 
2026-05-14T10:22:14.0179674Z   11) [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-14T10:22:14.0181027Z 
2026-05-14T10:22:14.0181865Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoMatch[2m([22m[32mexpected[39m[2m)[22m
2026-05-14T10:22:14.0182526Z 
2026-05-14T10:22:14.0182993Z     Expected pattern: [32m/^0028-NaviRunR_\d{3}$/[39m
2026-05-14T10:22:14.0183847Z     Received string:  [31m"0000-NaviStandD_000"[39m
2026-05-14T10:22:14.0184253Z 
2026-05-14T10:22:14.0184465Z       32 |
2026-05-14T10:22:14.0185066Z       33 |     // Frame key must match Run R pattern: '0028-NaviRunR_NNN'
2026-05-14T10:22:14.0186221Z     > 34 |     expect(frameWhileRunning).toMatch(/^0028-NaviRunR_\d{3}$/);
2026-05-14T10:22:14.0186972Z          |                               ^
2026-05-14T10:22:14.0187449Z       35 |
2026-05-14T10:22:14.0187940Z       36 |     // Release right arrow and wait for stop
2026-05-14T10:22:14.0188629Z       37 |     await page.keyboard.up('ArrowRight');
2026-05-14T10:22:14.0189590Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:34:31
2026-05-14T10:22:14.0190254Z 
2026-05-14T10:22:14.0191095Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:14.0192543Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/test-failed-1.png
2026-05-14T10:22:14.0194143Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0194738Z 
2026-05-14T10:22:14.0195799Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0197152Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/video.webm
2026-05-14T10:22:14.0198680Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0199216Z 
2026-05-14T10:22:14.0200119Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/error-context.md
2026-05-14T10:22:14.0201041Z 
2026-05-14T10:22:14.0201881Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:14.0203240Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-14T10:22:14.0204189Z     Usage:
2026-05-14T10:22:14.0204410Z 
2026-05-14T10:22:14.0205366Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-14T10:22:14.0207531Z 
2026-05-14T10:22:14.0208291Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0208828Z 
2026-05-14T10:22:14.0209558Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0230939Z 
2026-05-14T10:22:14.0231682Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-14T10:22:14.0232289Z 
2026-05-14T10:22:14.0232601Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-14T10:22:14.0233149Z     Expected: visible
2026-05-14T10:22:14.0233540Z     Timeout: 15000ms
2026-05-14T10:22:14.0233965Z     Error: element(s) not found
2026-05-14T10:22:14.0234249Z 
2026-05-14T10:22:14.0234393Z     Call log:
2026-05-14T10:22:14.0234968Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-14T10:22:14.0236298Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-14T10:22:14.0236776Z 
2026-05-14T10:22:14.0236788Z 
2026-05-14T10:22:14.0236954Z        at fixtures.ts:172
2026-05-14T10:22:14.0237218Z 
2026-05-14T10:22:14.0237376Z       170 |  */
2026-05-14T10:22:14.0238032Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-14T10:22:14.0239098Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-14T10:22:14.0239968Z           |                                                                ^
2026-05-14T10:22:14.0240781Z       173 |     timeout: 15_000,
2026-05-14T10:22:14.0241190Z       174 |   });
2026-05-14T10:22:14.0241528Z       175 | }
2026-05-14T10:22:14.0242289Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-14T10:22:14.0243516Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:22:11
2026-05-14T10:22:14.0244159Z 
2026-05-14T10:22:14.0244940Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:14.0246802Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/test-failed-1.png
2026-05-14T10:22:14.0248332Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0248832Z 
2026-05-14T10:22:14.0249529Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0250810Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/video.webm
2026-05-14T10:22:14.0252210Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0252687Z 
2026-05-14T10:22:14.0253574Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/error-context.md
2026-05-14T10:22:14.0254765Z 
2026-05-14T10:22:14.0256029Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:14.0257376Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-14T10:22:14.0258305Z     Usage:
2026-05-14T10:22:14.0258524Z 
2026-05-14T10:22:14.0259484Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-14T10:22:14.0260477Z 
2026-05-14T10:22:14.0261125Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0261605Z 
2026-05-14T10:22:14.0262412Z   12) [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block south wall 
2026-05-14T10:22:14.0263127Z 
2026-05-14T10:22:14.0263960Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-14T10:22:14.0265001Z 
2026-05-14T10:22:14.0265311Z     Expected: [32mtrue[39m
2026-05-14T10:22:14.0266254Z     Received: [31mfalse[39m
2026-05-14T10:22:14.0266554Z 
2026-05-14T10:22:14.0267066Z       127 |     // SOURCE: CLI-08 MVP gate requires a logged-in Chrome client to move under
2026-05-14T10:22:14.0268058Z       128 |     // held WASD input before collision boundaries are evaluated.
2026-05-14T10:22:14.0268988Z     > 129 |     expect(edge.moved(after[edge.axis], before[edge.axis])).toBe(true);
2026-05-14T10:22:14.0269802Z           |                                                             ^
2026-05-14T10:22:14.0270726Z       130 |     edge.assertBlocked(after[edge.axis]);
2026-05-14T10:22:14.0271256Z       131 |   });
2026-05-14T10:22:14.0271616Z       132 | }
2026-05-14T10:22:14.0272458Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-floor-collision.e2e.test.ts:129:61
2026-05-14T10:22:14.0273180Z 
2026-05-14T10:22:14.0273983Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:14.0275342Z     test-results/cli-08-floor-collision.e2e-090ae-render-and-block-south-wall-chromium/test-failed-1.png
2026-05-14T10:22:14.0278874Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0279425Z 
2026-05-14T10:22:14.0280502Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0282136Z     test-results/cli-08-floor-collision.e2e-090ae-render-and-block-south-wall-chromium/video.webm
2026-05-14T10:22:14.0286415Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0287468Z 
2026-05-14T10:22:14.0288612Z     Error Context: test-results/cli-08-floor-collision.e2e-090ae-render-and-block-south-wall-chromium/error-context.md
2026-05-14T10:22:14.0289772Z 
2026-05-14T10:22:14.0290889Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:14.0292796Z     test-results/cli-08-floor-collision.e2e-090ae-render-and-block-south-wall-chromium/trace.zip
2026-05-14T10:22:14.0293744Z     Usage:
2026-05-14T10:22:14.0293959Z 
2026-05-14T10:22:14.0294898Z         pnpm exec playwright show-trace test-results/cli-08-floor-collision.e2e-090ae-render-and-block-south-wall-chromium/trace.zip
2026-05-14T10:22:14.0296131Z 
2026-05-14T10:22:14.0297315Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0297854Z 
2026-05-14T10:22:14.0298769Z   13) [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block west wall 
2026-05-14T10:22:14.0299532Z 
2026-05-14T10:22:14.0300643Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-14T10:22:14.0301252Z 
2026-05-14T10:22:14.0301572Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-14T10:22:14.0302390Z     Expected: visible
2026-05-14T10:22:14.0302816Z     Timeout: 15000ms
2026-05-14T10:22:14.0303269Z     Error: element(s) not found
2026-05-14T10:22:14.0303563Z 
2026-05-14T10:22:14.0304061Z     Call log:
2026-05-14T10:22:14.0304758Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-14T10:22:14.0306218Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-14T10:22:14.0306732Z 
2026-05-14T10:22:14.0306747Z 
2026-05-14T10:22:14.0306926Z        at fixtures.ts:172
2026-05-14T10:22:14.0307211Z 
2026-05-14T10:22:14.0307363Z       170 |  */
2026-05-14T10:22:14.0308040Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-14T10:22:14.0309441Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-14T10:22:14.0310658Z           |                                                                ^
2026-05-14T10:22:14.0311289Z       173 |     timeout: 15_000,
2026-05-14T10:22:14.0311760Z       174 |   });
2026-05-14T10:22:14.0312447Z       175 | }
2026-05-14T10:22:14.0313264Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-14T10:22:14.0314713Z         at loginAndAssertTiles (/home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-floor-collision.e2e.test.ts:24:9)
2026-05-14T10:22:14.0316437Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-floor-collision.e2e.test.ts:119:5
2026-05-14T10:22:14.0317154Z 
2026-05-14T10:22:14.0318301Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-14T10:22:14.0319659Z     test-results/cli-08-floor-collision.e2e-a77a2--render-and-block-west-wall-chromium/test-failed-1.png
2026-05-14T10:22:14.0321179Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0321722Z 
2026-05-14T10:22:14.0322496Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0324535Z     test-results/cli-08-floor-collision.e2e-a77a2--render-and-block-west-wall-chromium/video.webm
2026-05-14T10:22:14.0326321Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0326863Z 
2026-05-14T10:22:14.0327729Z     Error Context: test-results/cli-08-floor-collision.e2e-a77a2--render-and-block-west-wall-chromium/error-context.md
2026-05-14T10:22:14.0328637Z 
2026-05-14T10:22:14.0329455Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-14T10:22:14.0330778Z     test-results/cli-08-floor-collision.e2e-a77a2--render-and-block-west-wall-chromium/trace.zip
2026-05-14T10:22:14.0331700Z     Usage:
2026-05-14T10:22:14.0331907Z 
2026-05-14T10:22:14.0332833Z         pnpm exec playwright show-trace test-results/cli-08-floor-collision.e2e-a77a2--render-and-block-west-wall-chromium/trace.zip
2026-05-14T10:22:14.0334058Z 
2026-05-14T10:22:14.0334823Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-14T10:22:14.0335365Z 
2026-05-14T10:22:14.0335782Z   11 failed
2026-05-14T10:22:14.0337062Z     [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-14T10:22:14.0339140Z     [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-14T10:22:14.0341276Z     [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-14T10:22:14.0343583Z     [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:11:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene 
2026-05-14T10:22:14.0346072Z     [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) 
2026-05-14T10:22:14.0348266Z     [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) 
2026-05-14T10:22:14.0350334Z     [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-14T10:22:14.0352311Z     [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-14T10:22:14.0354310Z     [chromium] › test/e2e/cookie-reload.e2e.test.ts:15:1 › Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-14T10:22:14.0356815Z     [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-14T10:22:14.0359246Z     [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-14T10:22:14.0360934Z   2 flaky
2026-05-14T10:22:14.0362041Z     [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block south wall 
2026-05-14T10:22:14.0363660Z     [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block west wall 
2026-05-14T10:22:14.0364598Z   15 passed (8.1m)
2026-05-14T10:22:14.0662030Z /home/runner/work/rebno/rebno/apps/client:
2026-05-14T10:22:14.0663737Z  ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @rebno/client@0.1.0 test:e2e: `playwright test`
2026-05-14T10:22:14.0664689Z Exit status 1
2026-05-14T10:22:14.0851540Z ##[error]Process completed with exit code 1.
